package com.richest.api.service;

import java.util.List;
import java.util.Map;

import com.richest.api.controller.form.OrderForm;
import com.richest.bean.OrderMasterBean;
import com.richest.bean.OrderSubBanquetBean;
import com.richest.bean.OrderSubBean;
import com.richest.bean.OrderSubCommodityBean;
import com.richest.bean.OrderSubDiscountBean;
import com.richest.bean.OrderSubFullReductionBean;

/**
 * 客户端调用 订单功能服务接口
 * 
 * @author 杨博
 * @version richest-api 2.0
 *
 */
public interface IClientOrderService {

	/**
	 * 用户下订单
	 * 
	 * @param orderForm
	 * @return 创建的订单表中实体的主键集合
	 */
	Map<String, Object> placeOrder(OrderForm orderForm);

	/**
	 * 用户取消主订单
	 * 
	 * @param orderMasterId
	 *            主订单id
	 * @param StatusId
	 *            主订单的当前状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean cancelMasterOrder(Long orderMasterId, Long StatusId, Long userId, String remarks);

	/**
	 * 用户取消子订单
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @param StatusId
	 *            子订单当前的状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean cancelSubOrder(Long orderSubId, Long StatusId, Long userId, String remarks);

	/**
	 * 用户确认取消主订单
	 * 
	 * @param orderMasterId
	 *            主订单id
	 * @param StatusId
	 *            主订单当前状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean userConfirmationCancelMasterOrder(Long orderMasterId, Long StatusId, Long userId, String remarks);

	/**
	 * 用户确认取消子订单
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @param StatusId
	 *            子订单当前状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean userConfirmationCancelSubOrder(Long orderSubId, Long StatusId, Long userId, String remarks);

	/**
	 * 用户结束主订单
	 * 
	 * @param orderMasterId
	 *            主订单id
	 * @param StatusId
	 *            主订单当前状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean finishMasterOrder(Long orderMasterId, Long StatusId, Long userId, String remarks);

	/**
	 * 用户结束子订单
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @param StatusId
	 *            子订单当前状态id
	 * @param userId
	 *            用户id
	 * @param remarks
	 *            备注信息
	 * @return true 取消成功， false 取消失败
	 */
	Boolean finishSubOrder(Long orderSubId, Long StatusId, Long userId, String remarks);

	/**
	 * 查询 获取主订单Bean通过id
	 * 
	 * @param id
	 *            主订单id
	 * @return 主订单Bean
	 */
	OrderMasterBean orderMasterSelectOneById(Long id);

	/**
	 * 查询 获取主订单Bean集合通过用户id
	 * 
	 * @param userId
	 *            用户id
	 * @param BeginNumber
	 *            截取的区间开始值
	 * @param EndNumber
	 *            截取的区间结束值
	 * @return 主订单Bean集合
	 */
	List<OrderMasterBean> orderMasterSelectListByUserId(Long userId, Integer BeginNumber, Integer EndNumber);

	/**
	 * 查询 获取子订单Bean通过id
	 * 
	 * @param id
	 *            子订单id
	 * @return 自顶大Bean
	 */
	OrderSubBean orderSubSelectOneById(Long id);

	/**
	 * 查询 获取子订单Bean集合 通过主订单id
	 * 
	 * @param orderMasterId
	 *            主订单id
	 * @return 子订单Bean集合
	 */
	List<OrderSubBean> orderSubSelectListByOrderMasterId(Long orderMasterId);

	/**
	 * 查询 获取子订单包房信息Bean 通过id
	 * 
	 * @param id
	 *            子订单包房信息id
	 * @return 子订单包房信息Bean
	 */
	OrderSubBanquetBean orderSubBanquetSelectOneById(Long id);

	/**
	 * 查询 获取子订单包房信息集合 通过子订单id
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @return 子订单包房信息Bean结合
	 */
	List<OrderSubBanquetBean> orderSubBanquetSelectListByOrderSubId(Long orderSubId);

	/**
	 * 查询 获取子订单商品信息Bean 通过id
	 * 
	 * @param id
	 *            子订单商品信息id
	 * @return 子订单商品信息Bean
	 */
	OrderSubCommodityBean orderSubCommoditySelectOneById(Long id);

	/**
	 * 查询 获取子订单商品信息Bean集合 通过子订单id
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @return 子订单商品信息Bean集合
	 */
	List<OrderSubCommodityBean> orderSubCommoditySelectListByOrderSubId(Long orderSubId);

	/**
	 * 查询 获取子订单优惠信息Bean 通过id
	 * 
	 * @param id
	 *            子订单优惠信息id
	 * @return 子订单优惠信息Bean
	 */
	OrderSubDiscountBean orderSubDiscountSelectOneById(Long id);

	/**
	 * 查询 获取子订单优惠信息Bean集合 通过子订单id
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @return 子订单优惠信息Bean
	 */
	List<OrderSubDiscountBean> orderSubDiscountSelectListByOrderSubId(Long orderSubId);

	/**
	 * 查询 获取子订单满减信息Bean 通过id
	 * 
	 * @param id
	 *            子订单满减信息id
	 * @return 子订单满减信息Bean
	 */
	OrderSubFullReductionBean orderSubFullReductionSelectOneById(Long id);

	/**
	 * 查询 获取子订单满减信息Bean集合 通过id
	 * 
	 * @param orderSubId
	 *            子订单id
	 * @return 子订单满减信息集合
	 */
	List<OrderSubFullReductionBean> orderSubFullReductionSelectListByOrderSubId(Long orderSubId);
}
